#include "selfform.h"
#include "ui_selfform.h"
#include <QGlobalStatic>
#include <QMutex>
#include <QDebug>

Q_GLOBAL_STATIC(SelfForm,m_instance)

SelfForm::SelfForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SelfForm)
{
    ui->setupUi(this);

    initTableView();
}

SelfForm::~SelfForm()
{
    delete ui;

    SAFE_DELETE(m_cell_model);
    SAFE_DELETE(m_temp_model);
}

SelfForm *SelfForm::Instance()
{
    return m_instance;
}

void SelfForm::flashBMS39AUI(int tempNum, int tempNo, double tempVal, int cellNum, int cvNO, double cellVolt)
{
    //qDebug() << "tempNo: " << tempNo << "cvNO: " << cvNO;
    upDateModelView(m_temp_model,tempNum,tempNo,tempVal);
    upDateModelView(m_cell_model,cellNum,cvNO,cellVolt);
}

void SelfForm::flushUIBMS208View(const QList<BMS_Normal> &modelData)
{
    m_208model->SetModelData(modelData);
}

void SelfForm::initTableView()
{
    m_temp_model = new QStandardItemModel(8,3);
    m_temp_model->setHorizontalHeaderLabels({"温度值1","温度值2","温度值3"});
    ui->tableView_temp->setModel(m_temp_model);
    //选中整行
    ui->tableView_temp->setSelectionBehavior(QAbstractItemView::SelectRows);
    //无法编辑
    ui->tableView_temp->setEditTriggers(QTableView::NoEditTriggers);

    m_cell_model = new QStandardItemModel(8,12);
    m_cell_model->setHorizontalHeaderLabels({"电压值1","电压值2","电压值3","电压值4","电压值5","电压值6"
                                             ,"电压值7","电压值8","电压值9","电压值10","电压值11","电压值12"});
    ui->tableView_cell->setModel(m_cell_model);
    //选中整行
    ui->tableView_cell->setSelectionBehavior(QAbstractItemView::SelectRows);
    //无法编辑
    ui->tableView_cell->setEditTriggers(QTableView::NoEditTriggers);
    //设置所有列自动...
    ui->tableView_cell->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    /*第二个参数可以为：
    QHeaderView::Interactive     ：0 用户可设置，也可被程序设置成默认大小
    QHeaderView::Fixed           ：2 用户不可更改列宽
    QHeaderView::Stretch         ：1 根据空间，自动改变列宽，用户与程序不能改变列宽
    QHeaderView::ResizeToContents：3 根据内容改变列宽，用户与程序不能改变列宽*/

    m_208model = new MyModel();
    m_208model->SetCurrentTableTyoe(MyModel::TableType_BMS208);
    QStringList headerList;
    headerList << "名称" << "值" << "描述";
    m_208model->SetHeadData(headerList);
    ui->tableView_208->setModel(m_208model);
    //选中整行
    ui->tableView_208->setSelectionBehavior(QAbstractItemView::SelectRows);
    //无法编辑
    ui->tableView_208->setEditTriggers(QTableView::NoEditTriggers);
}

void SelfForm::upDateModelView(QStandardItemModel *model, int totalCount, int id, double value)
{    
    //m_mutex.lock();
    // 确保模型有足够的行，行数都是8行，本项目固定的
//    if (model->rowCount() < totalCount) {
//        model->setRowCount(totalCount);
//    }

    int colCount = model->columnCount();
    int row = (id-1) / colCount;
    int col;
    if(id <= colCount) {
        col = id - 1;
    } else {
        col = (id-1) % colCount;
    }
    QStandardItem *valueItem = new QStandardItem(QString::number(value));
    model->setItem(row,col,valueItem);

//    // 查找是否已经存在该编号的数据
//    for (int row = 0; row < model->rowCount(); row++) {
//        for(int col = 0; col < model->columnCount(); col++) {
//            QStandardItem *valueItem = new QStandardItem(QString::number(value));
//            model->setItem(row,col,valueItem);
//        }
////        QStandardItem *idItem = model->item(row, 0);
////        if (idItem && idItem->text().toInt() == id) {
////            // 如果存在，更新温度值
////            QStandardItem *valueItem = new QStandardItem(QString::number(value));
////            model->setItem(row, 1, valueItem);
////            return;
////        }
//    }

    // 如果不存在，添加新的数据
//    QStandardItem *idItem = new QStandardItem(QString::number(id));
//    model->setItem(id - 1, 0, idItem);

//    QStandardItem *valueItem = new QStandardItem(QString::number(value));
//    model->setItem(id - 1, 1, valueItem);

    //m_mutex.unlock();
}

